// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_CERT_INTERNAL_CERT_ISSUER_SOURCE_STATIC_H_
#define NET_CERT_INTERNAL_CERT_ISSUER_SOURCE_STATIC_H_

#include <unordered_map>

#include "base/strings/string_piece.h"
#include "net/cert/internal/cert_issuer_source.h"

namespace net {

// Synchronously returns issuers from a pre-supplied set.
class NET_EXPORT CertIssuerSourceStatic : public CertIssuerSource {
public:
    CertIssuerSourceStatic();
    ~CertIssuerSourceStatic() override;

    // Adds |cert| to the set of certificates that this CertIssuerSource will
    // provide.
    void AddCert(scoped_refptr<ParsedCertificate> cert);

    // CertIssuerSource implementation:
    void SyncGetIssuersOf(
        const ParsedCertificate* cert,
        std::vector<scoped_refptr<ParsedCertificate>>* issuers) override;
    void AsyncGetIssuersOf(const ParsedCertificate* cert,
        const IssuerCallback& issuers_callback,
        std::unique_ptr<Request>* out_req) override;

private:
    // The certificates that the CertIssuerSourceStatic can return, keyed on the
    // normalized subject value.
    std::unordered_multimap<base::StringPiece,
        scoped_refptr<ParsedCertificate>,
        base::StringPieceHash>
        intermediates_;

    DISALLOW_COPY_AND_ASSIGN(CertIssuerSourceStatic);
};

} // namespace net

#endif // NET_CERT_INTERNAL_CERT_ISSUER_SOURCE_STATIC_H_
